package com.sunrise.gateway.commons;

import java.util.LinkedList;

public abstract class GatewayByteBufferUtils {
    // 缓存最少数量
    private final static int BYTE_BUFFER_MIN_COUNT = 64;
    // 缓存最多数量
    private final static int BYTE_BUFFER_MAX_COUNT = 256;

    // 每个缓存的大小
    public final static int BYTE_BUFFER_MEMORY_SIZE = 98304;


    private volatile static LinkedList<byte[]> AVAIL_BUFFER_LIST = new LinkedList<>();
    static {
        for (int idx=0; idx<BYTE_BUFFER_MIN_COUNT; ++idx) {
            AVAIL_BUFFER_LIST.add(new byte[BYTE_BUFFER_MEMORY_SIZE]);
        }
    }

    /**
     * 从 缓存池 中 获取 一个缓存, 如果没有就新建一个
     * */
    public static byte[] getByteBufferFromPool() {
        synchronized (AVAIL_BUFFER_LIST) {
            if (AVAIL_BUFFER_LIST.size() > 0) {
                return AVAIL_BUFFER_LIST.pop();
            }
        }

        return new byte[BYTE_BUFFER_MEMORY_SIZE];
    }

    /**
     * 释放并返回 一个缓存 到 缓存池
     * */
    public static void releaseByteBufferToPool(byte[] bytes) {
        synchronized (AVAIL_BUFFER_LIST) {
            // 超过最大数量, 直接销毁byte数组
            if (AVAIL_BUFFER_LIST.size() < BYTE_BUFFER_MAX_COUNT) {
                AVAIL_BUFFER_LIST.push(bytes);
            }
        }
    }

}
